package com.itheima.d20_final;
/**
 * final修饰变量的注意：
 * -final修饰基本类型的变量，变量存储的数据不能被改变。
 * -final修饰的引用类型的变量，变量存储的地址不能被改变，但地址所指向的对象的内容是可以被改变的。
 */
public class FinalDemo1 {

    //5.final修饰静态成员变量：称为常量。
    //static final修饰的成员变量今后叫常量，值只有一个，而且不能被改变。
    //常量的单词建议全部大写，多个单词用下划线链接

    public static final String SCHOOL_NAME = "黑马程序员";//这种才叫常量，有些老师乱讲的，把字面量叫常量，喷他。

    public static final String SCHOOL_NAME2;//常量还有一种赋值方式，就是在静态代码块里面
    static{
        SCHOOL_NAME2 = "传智教育";
    }
    //6.final修饰实例成员变量
    private final String name = "高姑娘";//没有意义，这会导致所有的对象都叫高姑娘，你还改不了。

    public static void main(String[] args) {
        //目标：掌握final关键字的作用：final是最终的意思，可以修饰类、方法和变量。

        //3.final修饰变量：该变量有且只能被赋值一次。
        //java的变量有几种？两种：成员变量和局部变量
        //成员变量又分2种：静态成员变量、实例成员变量
        //局部变量：方法内、形参、for循环变量，构造器中的变量都是局部变量

        final int a = 12;
        // a = 15;//报错。二次赋值
        final double r = 3.14;

        //4.final修饰局部变量
        buy(0.7);
    }
        public static void buy(final double z){
        //z = 0.1;报错，第二次赋值
        }

       // 1.final修饰的类，叫做最终类，特点是不可以被继承。
        final class A{}
        class B{}
       // class B extends A{}//报错

        //2.final修饰的方法，叫做最终方法，特点是不可以被重写。
        //class C{
        //   public final void run(){
        //   }
        //   class D extends C{
        //     @Override
        //     public void run() {
        //       }
        //   }
        //}



}
